package org.jeecg.access.job;

import lombok.extern.slf4j.Slf4j;
import org.jeecg.access.entity.PlatformAccount;
import org.jeecg.access.platform.service.BaseGetDataService;
import org.jeecg.access.service.PlatformAccountService;
import org.jeecg.config.PlatformGetDataFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @description: todo
 * @author: taogang
 * @date: 2025/7/22 16:46
 */
@Slf4j
public class PlatformGetDataJob implements Job {

    @Autowired
    private PlatformAccountService platformAccountService;
    @Autowired
    private PlatformGetDataFactory getDataFactory;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        log.info("====== 平台数据获取定时任务开始执行 ======");

        try {
            // 同步平台账号数据，并获取异常账号列表
            log.info("开始同步平台账号数据...");
            List<PlatformAccount> accountList = platformAccountService.syncPlatformAccounts(null);
            log.info("平台账号同步完成，共处理 {} 个账号，其中异常账号 {} 个",
                    accountList.size(),
                    accountList.stream().filter(acc -> acc.getState() == 5).count()); // 此处仅用stream做统计，不涉及函数式编程逻辑

            // 获取所有平台的数据服务
            Map<String, BaseGetDataService> dataServiceMap = getDataFactory.getServiceMap();
            log.info("获取到 {} 个平台的数据服务，开始执行数据保存操作", dataServiceMap.size());

            // 遍历所有数据服务，执行保存操作（使用entrySet遍历，避免重复get操作）
            Set<Map.Entry<String, BaseGetDataService>> serviceEntries = dataServiceMap.entrySet();
            for (Map.Entry<String, BaseGetDataService> entry : serviceEntries) {
                String platformType = entry.getKey();
                BaseGetDataService dataService = entry.getValue();

                log.info("开始处理 [{}] 平台的数据", platformType);

                // 保存用户信息（单独捕获异常，避免影响其他操作）
                try {
                    log.debug("[{}] 平台开始保存用户信息", platformType);
                    dataService.saveUserInfo();
                    log.debug("[{}] 平台用户信息保存完成", platformType);
                } catch (Exception e) {
                    log.error("[{}] 平台保存用户信息失败", platformType, e);
                }

                // 保存作品数据（单独捕获异常，避免影响其他操作）
                try {
                    log.debug("[{}] 平台开始保存作品数据", platformType);
                    dataService.saveWorksData(0);
                    log.debug("[{}] 平台作品数据保存完成", platformType);
                } catch (Exception e) {
                    log.error("[{}] 平台保存作品数据失败", platformType, e);
                }

                log.info("[{}] 平台数据处理结束", platformType);
            }

            log.info("====== 平台数据获取定时任务执行完成 ======");
        } catch (Exception e) {
            log.error("平台数据获取定时任务执行失败", e);
            // 若需要中断任务，可抛出JobExecutionException
            throw new JobExecutionException("定时任务执行异常", e);
        }
    }
}
